home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
Libraries
/
Dots & Pixels
/
sources
/
screendots.cp
< prev
next >
Wrap
Text File
|
1995-09-29
|
5KB
|
202 lines
#include <QuickDraw.h>
#include "C_randomizer.h"
#include "screenarea.h"
#include "screendots.h"
void screendots::init( int aantaldots)
{
numdots = aantaldots;
current_intensity = 0;
dot_addresses = new unsigned char *[ numdots];
old_dot_addresses = new unsigned char *[ numdots];
for( int i = 0; i < numdots; i++)
{
dot_addresses[ i] = waste_area;
old_dot_addresses[ i] = waste_area;
}
}
void screendots::make_a_move( const unsigned char diff)
{
compute_addresses();
MoveDots( diff);
swap();
}
void screendots::make_a_multimove(
const int *offsets, int numoffsets, const unsigned char diff)
{
compute_addresses();
MoveMultiDots( offsets, numoffsets, diff);
swap();
}
void screendots::make_a_stereo_move( const char disparity)
{
compute_addresses();
MoveStereoDots( disparity);
swap();
}
void screendots::EraseDots()
{
unsigned char **the_dots = old_dot_addresses;
const unsigned char intensity = current_intensity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
**the_dots++ -= intensity;
}
current_intensity = 0;
}
void screendots::EraseMultiDots( const int *offsets, int numoffsets)
{
unsigned char **the_dots = old_dot_addresses;
const unsigned char intensity = current_intensity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
unsigned char *centerdot = *the_dots++;
const int *curoffset = offsets;
for( int j = 0; j < numoffsets; j++)
{
centerdot[ *curoffset++] -= intensity;
}
}
current_intensity = 0;
}
void screendots::EraseStereoDots()
{
unsigned char **the_dots = old_dot_addresses;
const int right_disparity = current_disparity / 2;
const int left_disparity = right_disparity - current_disparity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
(*the_dots)[ left_disparity] += 1;
(*the_dots)[ right_disparity] += 8;
the_dots += 1;
}
current_disparity = 0;
}
void screendots::SetDots( const unsigned char diff)
{
unsigned char **the_dots = dot_addresses;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
**the_dots++ += diff;
}
current_intensity = diff;
}
void screendots::SetMultiDots(
const int *offsets, int numoffsets, const unsigned char diff)
{
unsigned char **the_dots = dot_addresses;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
unsigned char *centerdot = *the_dots++;
const int *curoffset = offsets;
for( int j = 0; j < numoffsets; j++)
{
centerdot[ *curoffset++] += diff;
}
}
current_intensity = diff;
}
void screendots::SetStereoDots( const char disparity)
{
unsigned char **the_dots = dot_addresses;
const int right_disparity = disparity / 2;
const int left_disparity = right_disparity - disparity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
(*the_dots)[ left_disparity] -= 1;
(*the_dots)[ right_disparity] -= 8;
the_dots += 1;
}
current_disparity = disparity;
}
void screendots::MoveDots( const unsigned char diff)
{
unsigned char **old_dots = old_dot_addresses;
unsigned char **new_dots = dot_addresses;
const unsigned char intensity = current_intensity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
**old_dots++ -= intensity;
**new_dots++ += diff;
}
current_intensity = diff;
}
void screendots::MoveMultiDots(
const int *offsets, int numoffsets, const unsigned char diff)
{
unsigned char **old_dots = old_dot_addresses;
unsigned char **new_dots = dot_addresses;
const unsigned char intensity = current_intensity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
unsigned char *old_centerdot = *old_dots;
unsigned char *new_centerdot = *new_dots;
for( int j = 0; j < numoffsets; j++)
{
const int curoffset = offsets[ j];
old_centerdot[ curoffset] -= intensity;
new_centerdot[ curoffset] += diff;
}
old_dots += 1;
new_dots += 1;
}
current_intensity = diff;
}
void screendots::MoveStereoDots( const char disparity)
{
unsigned char **old_dots = old_dot_addresses;
unsigned char **new_dots = dot_addresses;
const int old_right_disparity = current_disparity / 2;
const int old_left_disparity = old_right_disparity - current_disparity;
const int new_right_disparity = disparity / 2;
const int new_left_disparity = new_right_disparity - disparity;
const int limit = numdots;
for( int i = 0; i < limit; i++)
{
(*old_dots)[ old_left_disparity] += 1;
(*old_dots)[ old_right_disparity] += 8;
(*new_dots)[ new_left_disparity] -= 1;
(*new_dots)[ new_right_disparity] -= 8;
old_dots += 1;
new_dots += 1;
}
current_disparity = disparity;
}